﻿using Nomo.CoreModule;

namespace Nomo.UnityCoreModule.MultiLanguages
{
    /// <summary>
    /// 多语言文本。
    /// </summary>
    public sealed class MultiLanguageText : UnityEngine.UI.Text
    {
        [UnityEngine.SerializeField] private bool manualApply;

        private const    string Left         = "<L>";                      // 多语言文本左标签。
        private const    string Right        = "</L>";                     // 多语言文本右标签。
        private const    string Pattern      = Left + @"(.|\n)*?" + Right; // 模式。
        private readonly int    _leftLength  = Left.Length;                // 多语言文本左标签的长度。
        private readonly int    _rightLength = Right.Length;               // 多语言文本右标签的长度。

        /// <inheritdoc />
        protected override void Start()
        {
            base.Start();
            if (!manualApply && Common.TrulyPlaying)
            {
                Apply();
            }
        }

        /// <summary>
        /// 应用。
        /// </summary>
        public void Apply()
        {
            text = System.Text.RegularExpressions.Regex.Replace(
                text,
                Pattern,
                match =>
                {
                    var matchValue = match.Value;
                    var rawValue   = matchValue.Substring(_leftLength, matchValue.Length - _leftLength - _rightLength);
                    return ulong.TryParse(rawValue.WithoutWhiteSpaces(), System.Globalization.NumberStyles.Integer, System.Globalization.NumberFormatInfo.InvariantInfo, out var value) ? MultiLanguageManager.Instance.GetString(value) : rawValue;
                }
            );
        }
    }
}
